import axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosResponse } from 'axios';

// 定义响应数据接口
interface ApiResponse<T = any> {
  code: number;
  data: T;
  message: string;
}

// 创建axios实例
const request: AxiosInstance = axios.create({
  // 从环境变量获取基础URL
  baseURL: import.meta.env.VITE_API_BASE_URL || '',
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
});

// 请求拦截器
request.interceptors.request.use(
  (config: InternalAxiosRequestConfig): InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig> => {
    // 可以在这里添加认证token
    // const token = localStorage.getItem('token');
    // if (token) {
    //   config.headers = config.headers || {};
    //   config.headers.Authorization = `Bearer ${token}`;
    // }
    return config;
  },
  (error: any): Promise<any> => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response: AxiosResponse<ApiResponse>): ApiResponse['data'] => {
    // 只返回响应数据部分
    return response.data.data;
  },
  (error) => {
    // 统一错误处理
    console.error('Request error', 'method:', error.config?.method, 'url:', error.config?.url, 'params:', error.config?.params, 'data:', error.config?.data, 'error:', error.message);
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 处理未授权错误
          console.error('Unauthorized', 'method:', error.config?.method, 'url:', error.config?.url);
          // router.push('/login');
          break;
        case 404:
          console.error('Resource not found', 'method:', error.config?.method, 'url:', error.config?.url);
          break;
        case 500:
          console.error('Server error', 'method:', error.config?.method, 'url:', error.config?.url);
          break;
        default:
          console.error('Other error', 'method:', error.config?.method, 'url:', error.config?.url);
      }
    }
    return Promise.reject(error);
  }
);

export default request;